/*
 * @Author: IBOSS 2776641037@qq.com
 * @Date: 2025-08-11 12:08:40
 * @LastEditors: IBOSS 2776641037@qq.com
 * @LastEditTime: 2025-08-11 13:50:35
 * @FilePath: \nuxt-js\plugins\axios.js
 * @Description: Axios 插件配置
 */

export default function ({ $axios, redirect, store }) {
  // 请求拦截器
  $axios.onRequest(config => {
    // 确保所有请求都使用 /adminapi 前缀
    // if (!config.url.startsWith('/adminapi')) {
    //   config.url = `/adminapi${config.url}`
    // }
    
    // 添加请求头
    config.headers = {
      ...config.headers,
      'Content-Type': 'application/json',
      'Accept': 'application/json'
    }
    
    // 如果有 token，添加到请求头
    // if (store.state.auth && store.state.auth.token) {
    //   config.headers.Authorization = `Bearer ${store.state.auth.token}`
    // }
    
    console.log('发送请求:', config.method.toUpperCase(), config.url)
    return config
  })

  // 响应拦截器
  $axios.onResponse(response => {
    console.log('收到响应:', response.status, response.config.url)
    return response
  })

  // 错误拦截器
  $axios.onError(error => {
    // 更可靠的状态码获取方式
    let code = null
    
    if (error.response) {
      // 服务器响应了错误状态码
      code = error.response.status
    } else if (error.request) {
      // 请求已发出但没有收到响应
      code = 'NETWORK_ERROR'
    } else {
      // 请求配置出错
      code = 'REQUEST_ERROR'
    }
    
    // console.log('错误详情:', {
    //   code,
    //   error: error,
    //   response: error.response,
    //   request: error.request
    // })
    
    if (code === 400) {
      console.error('请求参数错误')
    } else if (code === 401) {
      console.error('未授权，请重新登录')
      // 可以在这里处理登录过期逻辑
      // redirect('/login')
    } else if (code === 403) {
      console.error('拒绝访问')
    } else if (code === 404) {
      console.error('请求的资源不存在')
    } else if (code === 500) {
      console.error('服务器内部错误')
    } else if (code === 'NETWORK_ERROR') {
      console.error('网络错误，请检查网络连接')
    } else if (code === 'REQUEST_ERROR') {
      console.error('请求配置错误')
    } else {
      console.error('请求失败:', error.message || '未知错误')
    }
    
    return Promise.reject(error)
  })
} 